﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Specialized;
using AFI.Speargun.Web.Core;

namespace AFI.Speargun.Web.Models
{
    public interface ISpeargunService
    {
        // Category methods
        bool CreateCategory(Guid parentCategoryId, Category category);
        bool DeleteCategory(Guid categoryId);
        bool EditCategory(Category category);
        Category GetCategory(Guid? categoryId);

        // Department methods
        bool CreateDepartment(Guid parentDepartmentId, Department department);
        bool DeleteDepartment(Guid departmentId);
        bool EditDepartment(Department department);
        Department GetDepartment(Guid? departmentId);

        // AssetEntry methods
        bool CreateAssetEntry(Guid CategoryId, Guid DepartmentId, Guid DepreciationCurrencyId, Guid AcquisitionModeId, AssetEntry assetEntry);
        bool DeleteAssetEntry(Guid assetEntryId);
        bool EditAssetEntry(AssetEntry assetEntry);
        AssetEntry GetAssetEntry(Guid assetEntryId);

        // AssetEntryAdditional methods
        bool EditAssetEntryAdditional(AssetEntryAdditional assetEntryAdditional);
        Dictionary<AssetEntryAdditionalDefinitionField, string> GetAssetEntryAdditional(Guid assetEntryId);

        // Currency methods
        bool CreateCurrency(Currency currency);
        bool DeleteCurrency(Guid currencyId);
        bool EditCurrency(Currency currency);
        Currency GetCurrency(Guid currencyId);
        IEnumerable<Currency> ListCurrencies();

        // AcquisitionMode methods
        bool CreateAcquisitionMode(AcquisitionMode acquisitionMode);
        bool DeleteAcquisitionMode(Guid acquisitionModeId);
        bool EditAcquisitionMode(AcquisitionMode acquisitionMode);
        AcquisitionMode GetAcquisitionMode(Guid acquisitionModeId);
        IEnumerable<AcquisitionMode> ListAcquisitionModes();

        // InventoryChecking methods
        bool CreateInventoryChecking(Guid departmentId, InventoryChecking inventoryChecking);
        bool DeleteInventoryChecking(Guid inventoryCheckingId);
        bool EditInventoryChecking(InventoryChecking inventoryChecking);
        InventoryChecking GetInventoryChecking(Guid inventoryCheckingId);
        IEnumerable<InventoryChecking> ListInventoryCheckings();

        // AssetInventory methods
        bool CreateAssetInventory(Guid assetEntryId, AssetInventory assetInventory);
        bool DeleteAssetInventory(Guid inventoryCheckingId);
        bool EditAssetInventory(AssetInventory assetInventory);
        AssetInventory GetAssetInventory(Guid assetInventoryId);
        IEnumerable<AssetInventory> ListAssetInventories(Guid assetEntryId);
    }
}
